package com.linkdood.app.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.linkdood.app.domain.SysMenu;
import com.linkdood.app.domain.menu.RouterVo;
import com.linkdood.app.domain.tree.TreeSelect;
import java.util.*;


/**
 * @author chenkexu
 * @date 2021/4/15
 */
public interface SysMenuService extends IService<SysMenu> {

    /**
     * 验证菜单名称唯一性
     */
    String checkMenuNameUnique(SysMenu sysMenu);

    /**
     * 查询系统菜单列表
     *
     * @param menu 菜单信息
     * @return 菜单列表
     */
    List<SysMenu> listMenus(SysMenu menu, String userId);

    /**
     * 是否存在菜单子节点
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    boolean hasChildByMenuId(Long menuId);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param menus 菜单列表
     * @return 下拉树结构列表
     */
    List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus);

    /**
     * 构建前端所需要树结构
     *
     * @param menus 菜单列表
     * @return 树结构列表
     */
    List<SysMenu> buildMenuTree(List<SysMenu> menus);


    /**
     * 根据用户ID查询菜单
     *
     * @param userId 用户名称
     * @return 菜单列表
     */
    List<SysMenu> listMenuTreeByUserId(String userId);

    /**
     * 根据父节点的ID获取所有子节点
     *
     * @param list     分类表
     * @param parentId 传入的父节点ID
     * @return String
     */
    List<SysMenu> listChildPerms(List<SysMenu> list, String parentId);

    /**
     * 构建前端路由所需要的菜单
     *
     * @param menus 菜单列表
     * @return 路由列表
     */
    List<RouterVo> buildMenus(List<SysMenu> menus);

    /**
     * 获取路由名称
     *
     * @param menu 菜单信息
     * @return 路由名称
     */
    String getRouteName(SysMenu menu);

    /**
     * 获取路由地址
     *
     * @param menu 菜单信息
     * @return 路由地址
     */
    String getRouterPath(SysMenu menu);

    /**
     * 是否为菜单内部跳转
     *
     * @param menu 菜单信息
     * @return 结果
     */
    boolean isMenuFrame(SysMenu menu);

    /**
     * 目录为layout
     */

    /**
     * 获取组件信息
     *
     * @param menu 菜单信息
     * @return 组件信息
     */
    String getComponent(SysMenu menu);

    /**
     * 是否为parent_view组件
     *
     * @param menu 菜单信息
     * @return 结果
     */
    boolean isParentView(SysMenu menu);
    /**
     * 根据用户ID查询权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    Set<String> listMenuPermsByUserId(String userId);
}
